/*!
* 可滑块控件
* @author wsfuyibing <websearch@163.com>
* @update 2014-08-07
* @example <div data-role="slider" 
*               data-slider-delay="8" 
*          />
*/
$.fn.muiWidget('slider', function(obj){
	var c = {delay : 0, vertical : false, itemlist : false, itemside : 'c'};
	/*!
	* 延迟
	*/
	var delay = obj.attr('data-slider-delay') || 0; if (delay && delay.toString().match(/^(\d+)$/)){
		c.delay = parseInt(delay);
	}
	/*!
	* 方向
	*/
	if (obj.attr('data-slider-vertical') === 'true'){
		c.vertical = true;
	}
	/*!
	* 条目
	*/
	if (obj.attr('data-slider-itemlist') === 'true'){
		var side = obj.attr('data-slider-itemside') || ''; if (side == 'l' || side == 'r'){
			c.itemside = side; } 
			c.itemlist = true;
	}
	/*!
	* 初始化
	*/
	obj.muiSlider(c);
});

/*!
* 初始化
* @param object c, 接受参数
*               int delay, 延迟时长[默认: 0, 即不自动切换]
*               boolean vertical, 是否纵向(默认: false, 即横向)
*               boolean itemlist, 条目列表(默认: false, 即不显示)
*               string itemside, 位置纵向(默认: c, 即居中; 支持: l、c、r, 即左、中、右)
*/
$.fn.muiSlider = function(c){
	var o = $(this), 
		c = c || {};
	/*!
	* 允许修改尺寸
	*/
	o.attr({'data-role-size' : true, 'data-role-random' : 0}).data('size', function(){
		o.muiSliderSize();
	});
	/*!
	* 默认配置
	*/
	c.delay = c.delay || 0;
	c.vertical = c.vertical === true;
	c.itemlist = c.itemlist === true;
	c.itemside = 'c';
	/*!
	* 条目结构
	*/
	o.find('> *').each(function(){
		$(this).wrap('<div class="mui-slider-item" />');
	});
	/*!
	* 容器结构
	*/
	o.wrapInner('<div class="mui-slider-wrap" style="height:'+o.height()+'px" />');
	/*!
	* 容器尺寸
	*/
	var item = o.muiSliderSize(function(){
		o.find('.mui-slider-wrap').addClass('init').css('position', 'relative');
	});
	/*!
	* 空记录
	*/
	if (item == 0){
		return o;
	}
	/*!
	* 大于1条
	*/
	if (item > 1){
		/*!
		* 触屏
		*/
		o.muiSliderTouch(o.vertical);
		/*!
		* 条目
		*/
		if (c.itemlist){
			var htm = ''; for (var i = 1; i <= item; i++){
				htm += '<a data-role-random-item="'+(i-1)+'"'+(i == 1 ? ' class="hover"' : '')+' href="javascript:void(0)">'+i+'</a>'; }
			o.append('<div class="mui-slider-list '+c.itemside+'">'+htm+'</div>').find('[data-role-random-item]').click(function(){
				o.muiSliderRandom($(this).attr('data-role-random-item'));
			});
		}
	}
	/*!
	* 返回当前选择对象
	*/
	return o;
};

$.fn.muiSliderDelay = function(){
	
};

$.fn.muiSliderRandom = function(i){
	var o = $(this), 
		i = i == undefined ? 0 : i, 
		l = o.find('.mui-slider-item').length - 1;
		i = parseInt(i); if (i > l){i = l}else if (i < 0){i = 0}
	var w = o.width(); o.find('.mui-slider-wrap').stop().animate({
		left : w * i * -1
	}, 350, function(){
		o.attr('data-role-random', i).find('[data-role-random-item]').each(function(){
			var v = $(this).attr('data-role-random-item'); v = parseInt(v); if (v == i){
				$(this).addClass('hover')
			} else {
				$(this).removeClass('hover')
			}
		})
	});
};
/*!
* 变更尺寸
* @param function fn, 回调(可选)
* @return int item, 条目数量
*/
$.fn.muiSliderSize = function(fn){
	var o = $(this), 
		i = o.attr('data-role-random'); i = parseInt(i);
	/*!
	* 遍历
	* @var int dw, DOM-width
	* @var int dh, DOM-height
	*/
	var dw = o.width(), 
		dh = o.height(), 
		ii = 0;
	o.find('.mui-slider-item').each(function(k){
		var tmp = {'position' : 'absolute', 'width' : dw};
			tmp.left = (k-i) * dw;
		$(this).css(tmp); ii++;
	}); o.find('.mui-slider-wrap').css('width', ii * dw);
	/*!
	* 动画
	*/
	o.muiSliderRandom(i);
	/*!
	* 回调
	*/
	$.type(fn) !== 'function' || fn();
	/*!
	* 返回
	*/
	return ii;
};
/*!
* 触屏事件
*/
$.fn.muiSliderTouch = function(v){
	var o = $(this), i = 0, t = {
		n : 0, 
		p : 0, 
		s : {}, 
		m : {}
	}; o.find('.mui-slider-wrap').on({
		'touchstart' : function(e){
			var tmp = e.originalEvent.targetTouches; if (tmp.length){
				tmp = tmp[0];
				t.p = v ? $(this).position().top : $(this).position().left;
				t.s.x = tmp.pageX;
				t.s.y = tmp.pageY;
				
			}
		}, 'touchmove' : function(e){
			var tmp = e.originalEvent.targetTouches; e.preventDefault(); if (tmp.length){
				tmp = tmp[0];
				t.m.x = tmp.pageX;
				t.m.y = tmp.pageY;
				/*!
				* 位移值
				*/
				var ncs = {}; if (v){
					ncs.top = t.p + t.m.y - t.s.y; } else {
					ncs.left = t.p + t.m.x - t.s.x; }
				$(this).css(ncs);
			}
		}, 'touchend' : function(e){
			var idx = o.attr('data-role-random'), idn = -1;
				idx = parseInt(idx);
			if (t.m.x !== undefined && t.m.y !== undefined && t.m.x !== undefined && t.m.y !== undefined){
				var zz = v ? (t.m.y - t.s.y) : (t.m.x - t.s.x), 
					zx = 50;
				/*!
				* 向左
				*/
				if (zz < 0){
					zz *= -1;
					idn *= -1
				}
				/*!
				* +1
				*/
				if (zz > zx){
					idx += idn;
				}
			} o.muiSliderRandom(idx);
		}
	});
};